package main

import (
	"encoding/binary"
	"fmt"
	"net"
)

func handleConnection(conn net.Conn) {
	// 输出连接信息
	fmt.Println("已连接到客户端", conn.RemoteAddr())

	// 循环处理客户端请求
	for {
		// 读取客户端发送的数据
		buf := make([]byte, 4)
		_, err := conn.Read(buf)
		if err != nil {
			fmt.Println("从客户端读取数据出错：", err)
			return
		}

		// 获取消息长度
		messageLength := binary.BigEndian.Uint32(buf)

		// 读取消息内容
		buf = make([]byte, messageLength)
		_, err = conn.Read(buf)
		if err != nil {
			fmt.Println("从客户端读取数据出错：", err)
			return
		}

		// 处理客户端请求
		message := string(buf)
		fmt.Println("客户端请求：", message)

		// 响应客户端请求
		response := "收到你的消息了"
		responseLength := make([]byte, 4)
		binary.BigEndian.PutUint32(responseLength, uint32(len(response)))
		conn.Write(responseLength)
		conn.Write([]byte(response))
	}
}

func main() {
	// 监听指定的TCP端口
	port := ":5529"
	listener, err := net.Listen("tcp", port)
	if err != nil {
		fmt.Println("监听端口出错：", err)
		return
	}
	fmt.Println("正在监听端口", port)

	// 循环接受客户端连接
	for {
		conn, err := listener.Accept()
		if err != nil {
			fmt.Println("接受客户端连接出错：", err)
			continue
		}

		// 启动一个新协程来处理客户端请求
		go handleConnection(conn)
	}
}
